#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const int N = 200010, mod = 998244353;
int n;
int a[N], b[N];
using LL = long long;
int main()
{
    cin >> n;
    for(int i = 0; i < n; ++i) cin >> a[i];
    for(int i = 0; i < n; ++i) cin >> b[i];
    // 根据贡献法,每个位置对总和的贡献是val[i]*(i + 1)*(n - i)
    // 对于所有子数组的和，考虑贡献法
    // 由于每个位置只有b是未知数，所以直接排序b，逆序a即可，根据排序不等式可以知道这是最优解
    vector<LL> val(n);
    for(int i = 0; i < n; ++i)
        val[i] = a[i] * 1ll * (i + 1) * (n - i);
        
    sort(val.rbegin(), val.rend());
    sort(b, b + n);

    int ans = 0;
    for(int i = 0; i < n; ++i)
        ans = (ans + (val[i] % mod * b[i] % mod)) % mod;
    cout << ans << endl; 
    return 0;
}